/*
 * name:图片验证码 ImageCheckCode
 * author:yanmu.wj@taobao.com
 * date:2011-11-22
 */
KISSY.add('ImageCheckCode',function(S,Tip){
    var ImageCheckCode = function(cfg){
        this.input = cfg.input && S.one(cfg.input);
        this.img = cfg.img && S.one(cfg.img);
        this.getUrl = cfg.getUrl || '';
        this.checkUrl = cfg.checkUrl || '';
        this.trigger = cfg.trigger && S.one(cfg.trigger);
        this.tip = cfg.tip && S.one(cfg.tip) ? Tip(cfg.tip) : null;

        this.defaultTip = cfg.defaultTip || null;

        //初始化为false，防止ajax延迟造成的不可提交
        this.disabledMsg = S.isString(cfg.disabledMsg) ? cfg.disabledMsg : '验证码格式有误，请重新输入！';
        this.disabled = true;
    };
    var _ImageCheckCode = function(cfg){
        return new ImageCheckCode(cfg);
    };
    S.augment(ImageCheckCode,{
        init:function(){
            if(!this.input || !this.img || !this.getUrl) return this;

            var self = this;

            if(this.trigger){
                this.trigger.on('click',function(e){
                    e.halt();
                    self.refresh();
                });
            }

            this.input.on('keyup',function(){
                self.check();
            });

            return this;
        },
        check:function(){
            var self = this;

            if(!S.trim(self.input.val()).length){
                this.disabled = true;
                this.disabledMsg = '验证码格式错误，请重新输入！';
                self.resetTip();
            }else if(!S.trim(self.input.val()).match(/^[\da-zA-Z]{4}$/)){
                this.disabled = true;
                this.disabledMsg = '验证码格式错误，请重新输入！';
                self.tip.error('验证码格式错误，请重新输入！');
            }else{
                this.disabled = false;
                self.tip.hide();
            }

            if(!self.checkUrl) return;

            S.io({
                url:self.checkUrl,
                data:{code:S.trim(self.input.val())},
                type:'post',
                dataType:'json',
                success:function(data){
                    if(data.success){
                        self.disabled = false;
                        self.tip.ok(data.msg || '');
                    }else{
                        self.disabled = true;
                        self.disabledMsg = '验证码格式错误，请重新输入！';
                        self.refresh();
                        self.tip.error(data.msg || self.disabledMsg);
                    }
                }
            });
        },
        refresh:function(){
            this.img.attr('src',this.getUrl + (this.getUrl.indexOf('?') >= 0 ? '&t=' : '?t') + S.now());
            this.input.fire('focus');
        },
        resetTip:function(){
            if(!this.tip) return;
            if(this.defaultTip && this.defaultTip.type && this.defaultTip.msg){
                this.tip.change(this.defaultTip.type,this.defaultTip.msg);
            }else{
                this.tip.hide();
            }
        }
    });
    return _ImageCheckCode;
},{
    requires:['Message']
});
